<?php
namespace App\Http\Common;
use App\Mail\CheckCode;
use App\Models\User;
use Exception;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Session;
use Qcloud\Sms\SmsSingleSender;

/**
 * 发送邮箱
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019-08-14
 * Time: 21:35
 */
class Email{
    //创建静态私有的变量保存该类对象
    private static $instance;
    //参数
    private $config;
    //防止直接创建对象
    private function __construct($config){
     $this->config = $config;
    }
    //防止克隆对象
    private function __clone(){
    }
    // 使用单列模式
    public static function getInstance($config=null){
        //判断$instance是否是Uni的对象
        //没有则创建
        if (!self::$instance instanceof self) {
            self::$instance = new self($config);
        }
        return self::$instance;
    }

    /**
     * 发送邮箱 验证码
     * @param $email 邮箱号码
     * @return bool
     */
    public function sendMessage($email){
        try {
            Globals::$error = "";
            if (time()-Session::get('yz-yzm-time')<60){
                Globals::$error = "邮箱验证码发送太过频繁，请稍候再试。";
                return false;
            }
            $yzm = MyUtils::randMath();//生成验证码
            $params = [$yzm];// 验证码
            Session::put("yx-yzm",$yzm);//将其保存在session中，5分钟后验证是否过期
            Session::put("yx-email",$email);//将其保存在session中，5分钟后验证是否过期
            Session::put("yx-yzm-time",time());//将其保存在session中，存入时间
            $res = Mail::send('checkCode',['id' => 1, 'yzYzm' => $yzm]
                ,function($message) use($email,$yzm){
                $message->to($email)->subject("您的验证码如下");
            });
            if ($res){// 发送错误
                Globals::$error = '发送邮箱失败，请确定邮箱是否正确';
                return false;
            }else{
                Globals::$error = "";
                return true;
            }
        } catch(Exception $e) {
            Globals::$error = json_decode($e);
            return false;
        }
    }

    /**
     * 验证邮箱 验证码
     * @param $code
     * @return bool|int
     */
    public function checkMessageCode($code){
        try {
            if ($code == MyUtils::getSessionConfig("CODE")){//万能验证码，默认为555555，在数据库里面配置
                return 1;
            }
            $offset = MyUtils::getSessionConfig("CODE_TIME")*10;
            $yzmTime= Session::get("yx-yzm-time");
            $time = time() - $yzmTime;// 相差时间
            if ($yzmTime!=null && $time - $offset>0){// 相差时间超过了 50分钟，就返回验证码超时
                Session::remove("yx-yzm");
                Session::remove("yx-yzm-time");
                Globals::$error = "邮箱验证码超时！请重新发送邮箱验证码！";
                return -1;// 验证码超时 移除验证码
            }else{
                if (!$code){
                    Globals::$error = "请输入邮箱验证码";
                    return false;
                }
                if ($code == Session::get("yx-yzm")) return 1;
                else {
                    Globals::$error = "邮箱验证码错误！请重新输入验证码！";
                    return -2;
                }// 验证码错误
            }
        } catch(Exception $e) {
            Globals::$error = "邮箱验证异常！请确认邮箱是否正确！";
            return -3;
        }
    }
}
